by JUAN DAVID ACOSTA TORRES
Over recent years, rapid technological developments have enabled bussinesses, from both the low and high end of the budget spectrum, to 'go online'. Now, E-platforms are ubiquitous and have profoundly reshaped the way the 'bussiness' and the 'customer' interact. This expansion has not come alone, however, and has prompted the surge of what has been called the 'sharing economy'. Now, this economic model has spread to virtually all aspects in our life, from transportation and education to food and clothing. Housing, off course, is not an exception.
Among the giants that are part of this new model one can easily find Airbnb, a vacation home rental platform (in principle) that connects potential 'hosts' and 'guests' in order "to create a world where anyone can belong anywhere". (https://news.airbnb.com/airbnb-2019-business-update/)
Now, as Airbnb has become the hub not only for individuals seeking short-term solutions, but also for more specialized real-estate agencies, the company has found opposition from governments and residents alike, from Tokio to San Diego, the place where it all started.
Given its position in the market (in-between long-term housing and hotels), the main problems that the company have faced can be summarized as: (I) Having a detrimental impact on the long-term housing stock, as it may become more profitable to rent a unit through the platform than to put it on the regular market, and (2) having a detrimental impact on the performance of the hotel industry.
In this sense, the objective of this exercise was to perform a preliminary exploratory analysis of AirBnB in San Diego, both of the general statistics describing the overall characteristics of the listings as well as of more specific spatial relations between the listings and the housing market, particularly, wether listings on Airbnb are aimed at tourists or medium and long-term residents.
# Fist, all the libraries needed for the analysis are imported
import pandas as pd
import altair as alt
import geopandas as geopandas
import contextily as cx
import folium as folium
from pysal.viz import mapclassify
alt.data_transformers.disable_max_rows()
DataTransformerRegistry.enable('default')
Listings_SanDiego_Extended = pd.read_csv('Listings_Extended.csv')
Listings_SanDiego_Extended
| id | listing_url | scrape_id | last_scraped | name | description | neighborhood_overview | picture_url | host_id | host_url | ... | review_scores_communication | review_scores_location | review_scores_value | license | instant_bookable | calculated_host_listings_count | calculated_host_listings_count_entire_homes | calculated_host_listings_count_private_rooms | calculated_host_listings_count_shared_rooms | reviews_per_month | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 5570 | https://www.airbnb.com/rooms/5570 | 20201025051130 | 2020-10-25 | Ocean front condo on the sand | Missionbeachretreat. Great Ocean Front Condo... | While some may compare San Diego’s Mission Bea... | https://a0.muscache.com/pictures/d3342744-140a... | 8435 | https://www.airbnb.com/users/show/8435 | ... | NaN | NaN | NaN | NaN | f | 3 | 3 | 0 | 0 | NaN |
| 1 | 29967 | https://www.airbnb.com/rooms/29967 | 20201025051130 | 2020-10-25 | Great home, 10 min walk to Beach | This 2 bedroom, 2 full bathroom home offers al... | NaN | https://a0.muscache.com/pictures/76103867/c9b5... | 129123 | https://www.airbnb.com/users/show/129123 | ... | 10.0 | 10.0 | 10.0 | NaN | f | 5 | 5 | 0 | 0 | 0.49 |
| 2 | 38245 | https://www.airbnb.com/rooms/38245 | 20201025051130 | 2020-10-25 | Point Loma: Den downstairs | Stay in a 1928 Spanish Style home. Den is dow... | This neighborhood is an expensive, high-end Po... | https://a0.muscache.com/pictures/f3073822-e493... | 164137 | https://www.airbnb.com/users/show/164137 | ... | 10.0 | 9.0 | 9.0 | NaN | f | 3 | 0 | 3 | 0 | 1.16 |
| 3 | 54001 | https://www.airbnb.com/rooms/54001 | 20201025051130 | 2020-10-25 | La Jolla 2 Bdr Cottage: 1 Qn; 2Twns, Blks 2 Ocn | Quiet, off the beaten path, this secluded cot... | Tranquility, stately trees, meditative, zen-fu... | https://a0.muscache.com/pictures/47035b04-633c... | 252692 | https://www.airbnb.com/users/show/252692 | ... | 10.0 | 10.0 | 10.0 | NaN | f | 2 | 1 | 1 | 0 | 1.96 |
| 4 | 62274 | https://www.airbnb.com/rooms/62274 | 20201025051130 | 2020-10-25 | charming, colorful, close to beach | Modern, cozy, artsy, and european in a lush ga... | We are in walking distance to Starbucks, Trade... | https://a0.muscache.com/pictures/84577734/93ca... | 302986 | https://www.airbnb.com/users/show/302986 | ... | 10.0 | 10.0 | 10.0 | NaN | f | 2 | 2 | 0 | 0 | 5.06 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 8683 | 46028900 | https://www.airbnb.com/rooms/46028900 | 20201025051130 | 2020-10-25 | Amazing apt in Pacific Beach (Crown Point area) | Hello there . My name is Mariana . I have an 2... | NaN | https://a0.muscache.com/pictures/c7db29d8-f13b... | 69059229 | https://www.airbnb.com/users/show/69059229 | ... | NaN | NaN | NaN | NaN | f | 1 | 1 | 0 | 0 | NaN |
| 8684 | 46035696 | https://www.airbnb.com/rooms/46035696 | 20201025051130 | 2020-10-25 | Gaslamp District Luxury High Rise | NaN | NaN | https://a0.muscache.com/pictures/2b684b36-1d3e... | 102202334 | https://www.airbnb.com/users/show/102202334 | ... | NaN | NaN | NaN | NaN | t | 2 | 2 | 0 | 0 | NaN |
| 8685 | 46036151 | https://www.airbnb.com/rooms/46036151 | 20201025051130 | 2020-10-25 | Gas lamp San Diego High-Rise | NaN | NaN | https://a0.muscache.com/pictures/b2232b80-92f5... | 102202334 | https://www.airbnb.com/users/show/102202334 | ... | NaN | NaN | NaN | NaN | t | 2 | 2 | 0 | 0 | NaN |
| 8686 | 46037988 | https://www.airbnb.com/rooms/46037988 | 20201025051130 | 2020-10-25 | South Park Modern Retreat! | Welcome to South Park, one of San Diego's olde... | This is the best neighborhood in San Diego! As... | https://a0.muscache.com/pictures/79e51e22-d1d8... | 2232295 | https://www.airbnb.com/users/show/2232295 | ... | NaN | NaN | NaN | NaN | f | 1 | 1 | 0 | 0 | NaN |
| 8687 | 46038206 | https://www.airbnb.com/rooms/46038206 | 20201025051130 | 2020-10-25 | Live like a local - Studio with huge backyard | Live like a local in this studio with a privat... | Pacific Beach is definitely San Diego's most f... | https://a0.muscache.com/pictures/2edafcd0-f496... | 270127613 | https://www.airbnb.com/users/show/270127613 | ... | NaN | NaN | NaN | NaN | t | 6 | 6 | 0 | 0 | NaN |
8688 rows × 74 columns
Listings_SanDiego_Extended.drop(['listing_url', 'scrape_id',
'last_scraped', 'description', 'neighborhood_overview', 'picture_url', 'host_response_rate',
'host_url', 'host_about', 'host_location', 'host_response_time', 'host_response_time', 'host_acceptance_rate',
'availability_30', 'availability_365', 'host_verifications', 'host_has_profile_pic', 'host_identity_verified',
'neighbourhood', 'neighbourhood_group_cleansed', 'accommodates', 'bathrooms', 'bathrooms_text', 'bedrooms', 'beds',
'amenities', 'minimum_minimum_nights', 'maximum_minimum_nights', 'minimum_maximum_nights', 'maximum_maximum_nights',
'minimum_nights_avg_ntm', 'maximum_nights_avg_ntm', 'calendar_updated', 'has_availability', 'availability_60',
'host_thumbnail_url', 'host_picture_url', 'review_scores_communication', 'review_scores_location', 'review_scores_value',
'review_scores_rating', 'review_scores_accuracy', 'review_scores_cleanliness', 'review_scores_checkin', 'instant_bookable',
'calculated_host_listings_count_entire_homes', 'calculated_host_listings_count_private_rooms',
'calculated_host_listings_count_shared_rooms', 'calendar_last_scraped'], axis=1, inplace=True)
Listings_SanDiego_Extended
| id | name | host_id | host_name | host_since | host_is_superhost | host_neighbourhood | host_listings_count | host_total_listings_count | neighbourhood_cleansed | ... | maximum_nights | availability_90 | number_of_reviews | number_of_reviews_ltm | number_of_reviews_l30d | first_review | last_review | license | calculated_host_listings_count | reviews_per_month | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 5570 | Ocean front condo on the sand | 8435 | Jef Karchin | 2009-02-23 | f | Mission Beach | 3.0 | 3.0 | Mission Bay | ... | 365 | 34 | 0 | 0 | 0 | NaN | NaN | NaN | 3 | NaN |
| 1 | 29967 | Great home, 10 min walk to Beach | 129123 | Michael | 2010-05-21 | t | Pacific Beach | 5.0 | 5.0 | Pacific Beach | ... | 365 | 59 | 61 | 1 | 0 | 2010-07-09 | 2020-08-31 | NaN | 5 | 0.49 |
| 2 | 38245 | Point Loma: Den downstairs | 164137 | Melinda | 2010-07-12 | f | Loma Portal | 3.0 | 3.0 | Roseville | ... | 21 | 45 | 143 | 0 | 0 | 2010-09-09 | 2019-10-20 | NaN | 3 | 1.16 |
| 3 | 54001 | La Jolla 2 Bdr Cottage: 1 Qn; 2Twns, Blks 2 Ocn | 252692 | Marsha | 2010-10-04 | t | La Jolla | 5.0 | 5.0 | La Jolla | ... | 1125 | 11 | 234 | 25 | 5 | 2011-01-04 | 2020-10-18 | NaN | 2 | 1.96 |
| 4 | 62274 | charming, colorful, close to beach | 302986 | Isabel | 2010-11-28 | t | Pacific Beach | 2.0 | 2.0 | Pacific Beach | ... | 30 | 35 | 609 | 72 | 1 | 2010-12-05 | 2020-09-27 | NaN | 2 | 5.06 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 8683 | 46028900 | Amazing apt in Pacific Beach (Crown Point area) | 69059229 | Mariana | 2016-04-26 | f | Pacific Beach | 1.0 | 1.0 | Pacific Beach | ... | 1125 | 9 | 0 | 0 | 0 | NaN | NaN | NaN | 1 | NaN |
| 8684 | 46035696 | Gaslamp District Luxury High Rise | 102202334 | Dequan | 2016-11-02 | f | East Village | 2.0 | 2.0 | East Village | ... | 222 | 72 | 0 | 0 | 0 | NaN | NaN | NaN | 2 | NaN |
| 8685 | 46036151 | Gas lamp San Diego High-Rise | 102202334 | Dequan | 2016-11-02 | f | East Village | 2.0 | 2.0 | East Village | ... | 1125 | 83 | 0 | 0 | 0 | NaN | NaN | NaN | 2 | NaN |
| 8686 | 46037988 | South Park Modern Retreat! | 2232295 | Sara | 2012-04-26 | t | South Park | 2.0 | 2.0 | Balboa Park | ... | 1125 | 89 | 0 | 0 | 0 | NaN | NaN | NaN | 1 | NaN |
| 8687 | 46038206 | Live like a local - Studio with huge backyard | 270127613 | Nathan | 2019-06-20 | t | La Jolla | 1.0 | 1.0 | Pacific Beach | ... | 1125 | 83 | 0 | 0 | 0 | NaN | NaN | NaN | 6 | NaN |
8688 rows × 26 columns
Listings_SanDiego_Extended['price']
0 $2,050.00
1 $225.00
2 $74.00
3 $135.00
4 $69.00
...
8683 $70.00
8684 $214.00
8685 $214.00
8686 $286.00
8687 $74.00
Name: price, Length: 8688, dtype: object
Listings_SanDiego_Extended['price'] = Listings_SanDiego_Extended['price'].map(lambda x: x.lstrip('$'))
Listings_SanDiego_Extended['price'].reset_index()
| index | price | |
|---|---|---|
| 0 | 0 | 2,050.00 |
| 1 | 1 | 225.00 |
| 2 | 2 | 74.00 |
| 3 | 3 | 135.00 |
| 4 | 4 | 69.00 |
| ... | ... | ... |
| 8683 | 8683 | 70.00 |
| 8684 | 8684 | 214.00 |
| 8685 | 8685 | 214.00 |
| 8686 | 8686 | 286.00 |
| 8687 | 8687 | 74.00 |
8688 rows × 2 columns
Listings_SanDiego_Extended['price'] = Listings_SanDiego_Extended['price'].str.replace(',','')
Listings_SanDiego_Extended['price']
0 2050.00
1 225.00
2 74.00
3 135.00
4 69.00
...
8683 70.00
8684 214.00
8685 214.00
8686 286.00
8687 74.00
Name: price, Length: 8688, dtype: object
Listings_SanDiego_Extended['price'] = pd.to_numeric(Listings_SanDiego_Extended['price'])
Listings_SanDiego_Extended['price']
0 2050.0
1 225.0
2 74.0
3 135.0
4 69.0
...
8683 70.0
8684 214.0
8685 214.0
8686 286.0
8687 74.0
Name: price, Length: 8688, dtype: float64
First of all, just as a visual guide, a histogram is used to verify the main values over which the price per night ranges. Then, the mean and the standard deviation of all the prices is calculated. It was assumed that values above the mean + 2std were too extreme, and thus, were not considered in the analysis.
It has to be noted that this is not an exact way to remove outliers in the data, first because those same outliers were used to calculate the mean and std, and second, because some of the removed values represent a 'true observation'. However, in order to make visualizations more clear, they were removed.
Listings_SanDiego_Extended['price'].hist()
<AxesSubplot:>
Listings_SanDiego_Extended['price'].agg('mean')
233.45338397790056
Listings_SanDiego_Extended['price'].std()*2
755.701823509284
# Number of values removed on the basis of price
Listings_SanDiego_Extended.query('price > 989')['id'].agg('count')
186
The new histogram clearly shows that the large majority of homes/apartments/rooms listed on Airbnb have a price per night between around 50 and 150 dollars.
Listings_SanDiego_Extended.query('price < 989')['price'].hist(bins=30)
<AxesSubplot:>
A query was used not only to remove the prices that were considered to extreme, but also to take into account only those listings that had at least one review in the last year (ltm-last twelve months). With this, the table to be analyzed is obtained.
It is worth mentioning that obtain many of the results multiple assumptions (with no real data to back them up) were made. Therefore, the interpretations that are made could be significantly flawed.
ListingsLTM_SanDiego_Extended = Listings_SanDiego_Extended.query('number_of_reviews_ltm > 0 & price < 989')
ListingsLTM_SanDiego_Extended
| id | name | host_id | host_name | host_since | host_is_superhost | host_neighbourhood | host_listings_count | host_total_listings_count | neighbourhood_cleansed | ... | maximum_nights | availability_90 | number_of_reviews | number_of_reviews_ltm | number_of_reviews_l30d | first_review | last_review | license | calculated_host_listings_count | reviews_per_month | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 29967 | Great home, 10 min walk to Beach | 129123 | Michael | 2010-05-21 | t | Pacific Beach | 5.0 | 5.0 | Pacific Beach | ... | 365 | 59 | 61 | 1 | 0 | 2010-07-09 | 2020-08-31 | NaN | 5 | 0.49 |
| 3 | 54001 | La Jolla 2 Bdr Cottage: 1 Qn; 2Twns, Blks 2 Ocn | 252692 | Marsha | 2010-10-04 | t | La Jolla | 5.0 | 5.0 | La Jolla | ... | 1125 | 11 | 234 | 25 | 5 | 2011-01-04 | 2020-10-18 | NaN | 2 | 1.96 |
| 4 | 62274 | charming, colorful, close to beach | 302986 | Isabel | 2010-11-28 | t | Pacific Beach | 2.0 | 2.0 | Pacific Beach | ... | 30 | 35 | 609 | 72 | 1 | 2010-12-05 | 2020-09-27 | NaN | 2 | 5.06 |
| 5 | 62949 | Pacific Beach Cozy Private Unit Bikes Included | 21532 | Lisa | 2009-06-14 | t | Pacific Beach | 2.0 | 2.0 | Pacific Beach | ... | 4 | 66 | 699 | 91 | 9 | 2012-08-23 | 2020-10-20 | NaN | 2 | 7.02 |
| 7 | 75668 | San Diego Living by JA 2 | 401936 | Johnathon | 2011-02-20 | f | North Park | 2.0 | 2.0 | North Hills | ... | 1825 | 15 | 195 | 7 | 1 | 2011-07-25 | 2020-09-30 | NaN | 2 | 1.73 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 8546 | 45817195 | Family home with 3 bedrooms, nice neighborhood | 371444913 | Luz | 2020-10-10 | f | Clairemont | 1.0 | 1.0 | Clairemont Mesa | ... | 365 | 0 | 1 | 1 | 1 | 2020-10-19 | 2020-10-19 | NaN | 1 | 1.00 |
| 8553 | 45831887 | Beautiful Place | 47352531 | Lucy E | 2015-10-24 | t | Ocean View Hills | 1.0 | 1.0 | Amphitheater And Water Park | ... | 1125 | 84 | 1 | 1 | 1 | 2020-10-18 | 2020-10-18 | NaN | 2 | 1.00 |
| 8559 | 45844736 | Great Room in Quiet House | 370815670 | Najib | 2020-10-05 | f | San Carlos | 2.0 | 2.0 | Lake Murray | ... | 1125 | 0 | 1 | 1 | 1 | 2020-10-22 | 2020-10-22 | NaN | 2 | 1.00 |
| 8571 | 45862532 | Large Bedrooms - Relaxing Patio- Farm Vibe in ... | 11612667 | Trevor & Heidi | 2014-01-24 | t | Hillcrest | 3.0 | 3.0 | Encanto | ... | 30 | 72 | 1 | 1 | 1 | 2020-10-16 | 2020-10-16 | NaN | 2 | 1.00 |
| 8583 | 45879403 | Charming Downtown San Diego Skyrise 1 Bedroom Apt | 199526348 | Jeffrey | 2018-07-02 | f | East Village | 0.0 | 0.0 | East Village | ... | 1125 | 55 | 5 | 5 | 5 | 2020-10-16 | 2020-10-20 | NaN | 1 | 5.00 |
6506 rows × 26 columns
Multiple aspects about the general characteristics of the listings were analyzed. To this end, a number of questions was used to make the process more explicit. These questions, the code used to find their answers, as well as a brief interpretation of the result, follow:
ListingsLTM_SanDiego_Extended['id'].agg(['count']).reset_index()
| index | id | |
|---|---|---|
| 0 | count | 6506 |
After dataset was "cleaned up", the number of listings went from 8688 to 6506. As it could be previously seen, the number of listings removed from the table on the basis of price was not high (186). Therefore, it is clear that the drop was caused by the number of inactive listings.
ListingsLTM_SanDiego_Extended.query ('room_type == "Entire home/apt" | room_type == "Private room" | room_type == "Shared room"').groupby('room_type')['id'].agg(['count'])
| count | |
|---|---|
| room_type | |
| Entire home/apt | 5355 |
| Private room | 1092 |
| Shared room | 47 |
ListingsLTM_SanDiego_Extended.groupby('neighbourhood_cleansed')['id'].agg(['count']).sort_values(by = 'count', ascending = False).reset_index()
| neighbourhood_cleansed | count | |
|---|---|---|
| 0 | Mission Bay | 1090 |
| 1 | Pacific Beach | 560 |
| 2 | La Jolla | 441 |
| 3 | Ocean Beach | 372 |
| 4 | East Village | 327 |
| ... | ... | ... |
| 96 | Amphitheater And Water Park | 2 |
| 97 | Horton Plaza | 1 |
| 98 | Sabre Springs | 1 |
| 99 | Lincoln Park | 1 |
| 100 | Eastlake Trails | 1 |
101 rows × 2 columns
chart1 = alt.Chart(ListingsLTM_SanDiego_Extended)
chart1.mark_bar().encode(x = alt.X('neighbourhood_cleansed', sort = '-y'), y = 'count(id)', tooltip=['neighbourhood_cleansed', 'count(id)', 'count()'])
ListingsLTM_SanDiego_Extended["host_id"].nunique()
3193
ListingsLTM_SanDiego_Extended.groupby('host_id')["id"].agg(['count']).agg('mean').reset_index()
| index | 0 | |
|---|---|---|
| 0 | count | 2.037582 |
ListingsLTM_SanDiego_Extended.groupby('host_id')['id'].agg(['count']).sort_values(by = 'count', ascending = False)
| count | |
|---|---|
| host_id | |
| 88168913 | 137 |
| 122055416 | 122 |
| 104309976 | 68 |
| 147276739 | 66 |
| 3017970 | 52 |
| ... | ... |
| 37364462 | 1 |
| 37439066 | 1 |
| 37615936 | 1 |
| 37691011 | 1 |
| 372800986 | 1 |
3193 rows × 1 columns
The name of the first, second and fourth 'hosts' are "710 Vacation", "SeaBreeze" and "WanderJaunt", all vacation property rental companies. The name of the third and fifth 'hosts' is John and Chloe, however, given the number of listings to their name, it is highly unlikely that they are truly private individuals.
ListingsLTM_SanDiego_Extended.groupby('host_id')['id'].agg(['count']).query('count > 3').agg('count').reset_index()
| index | 0 | |
|---|---|---|
| 0 | count | 266 |
ListingsLTM_SanDiego_Extended['price'].agg(['min', 'max', 'mean']).sort_values().reset_index()
| index | price | |
|---|---|---|
| 0 | min | 18.000000 |
| 1 | mean | 187.699354 |
| 2 | max | 979.000000 |
ListingsLTM_SanDiego_Extended['price'].std()
149.35417410184087
ListingsLTM_SanDiego_Extended.groupby('neighbourhood_cleansed')['price'].agg(['min', 'max', 'mean']).\
sort_values(by = 'mean', ascending = False).head(10)
| min | max | mean | |
|---|---|---|---|
| neighbourhood_cleansed | |||
| Wooded Area | 50.0 | 968.0 | 317.419355 |
| Rancho Del Rey | 85.0 | 528.0 | 316.666667 |
| La Jolla | 50.0 | 979.0 | 303.755102 |
| North City | 58.0 | 699.0 | 289.500000 |
| Mission Bay | 18.0 | 965.0 | 284.975229 |
| Torrey Pines | 128.0 | 657.0 | 284.909091 |
| Eastlake Trails | 250.0 | 250.0 | 250.000000 |
| Horton Plaza | 250.0 | 250.0 | 250.000000 |
| Del Mar Heights | 67.0 | 685.0 | 244.468750 |
| Roseville | 59.0 | 888.0 | 241.711538 |
Of the 7 neighbourhoods with the most listings (overall), two of them ('Mission Bay' and 'La Jolla') also seem to have the listings with the highest prices
ListingsLTM_SanDiego_Extended.groupby('host_id')['price'].agg(['count','mean']).query('count > 5').\
sort_values(by = 'mean', ascending = False).reset_index().head(10)
| host_id | count | mean | |
|---|---|---|---|
| 0 | 9671674 | 6 | 567.166667 |
| 1 | 9624153 | 10 | 461.600000 |
| 2 | 8735628 | 22 | 440.454545 |
| 3 | 2772383 | 19 | 437.315789 |
| 4 | 39150333 | 6 | 434.000000 |
| 5 | 130904349 | 47 | 412.553191 |
| 6 | 38690778 | 46 | 409.391304 |
| 7 | 9832430 | 12 | 406.750000 |
| 8 | 5942374 | 8 | 403.125000 |
| 9 | 88168913 | 137 | 401.620438 |
ListingsLTM_SanDiego_Extended.groupby('host_id')['price'].agg(['count','mean']).query('count < 5').\
sort_values(by = 'mean', ascending = False).reset_index().head(10)
| host_id | count | mean | |
|---|---|---|---|
| 0 | 25358886 | 1 | 968.0 |
| 1 | 1895582 | 1 | 965.0 |
| 2 | 31318029 | 1 | 950.0 |
| 3 | 102527469 | 1 | 929.0 |
| 4 | 32296773 | 1 | 928.0 |
| 5 | 6388958 | 1 | 926.0 |
| 6 | 208731426 | 1 | 904.0 |
| 7 | 365861993 | 1 | 899.0 |
| 8 | 154881413 | 1 | 888.0 |
| 9 | 123710659 | 2 | 872.5 |
Basing the answer in the highest 10 average prices for each table, it could be said that yes, there is a significant difference between the average prices offered by the two groups
ListingsLTM_SanDiego_Extended.query('minimum_nights < 15').groupby('neighbourhood_cleansed')['id'].agg(['count']).sort_values(by = 'count', ascending = False).reset_index()
| neighbourhood_cleansed | count | |
|---|---|---|
| 0 | Mission Bay | 1079 |
| 1 | Pacific Beach | 536 |
| 2 | La Jolla | 433 |
| 3 | Ocean Beach | 369 |
| 4 | North Hills | 289 |
| ... | ... | ... |
| 94 | Amphitheater And Water Park | 2 |
| 95 | Lincoln Park | 1 |
| 96 | Eastlake Trails | 1 |
| 97 | East Lake | 1 |
| 98 | Sabre Springs | 1 |
99 rows × 2 columns
ListingsLTM_SanDiego_Extended.query('minimum_nights < 15').groupby('room_type')['id'].agg(['count']).reset_index()
| room_type | count | |
|---|---|---|
| 0 | Entire home/apt | 5047 |
| 1 | Hotel room | 12 |
| 2 | Private room | 1026 |
| 3 | Shared room | 46 |
ListingsLTM_SanDiego_Extended.query('minimum_nights < 7')['id'].agg(['count']).agg('sum')
5921
ListingsLTM_SanDiego_Extended.query('minimum_nights > 15').groupby('neighbourhood_cleansed')['id'].agg(['count']).sort_values(by = 'count', ascending = False).reset_index()
| neighbourhood_cleansed | count | |
|---|---|---|
| 0 | East Village | 42 |
| 1 | North Hills | 25 |
| 2 | Pacific Beach | 24 |
| 3 | Midtown | 20 |
| 4 | Mira Mesa | 19 |
| 5 | Gaslamp Quarter | 19 |
| 6 | University City | 16 |
| 7 | Little Italy | 13 |
| 8 | Mission Bay | 11 |
| 9 | Carmel Valley | 10 |
| 10 | La Jolla Village | 10 |
| 11 | Old Town | 9 |
| 12 | Marina | 9 |
| 13 | Core | 8 |
| 14 | Loma Portal | 8 |
| 15 | La Jolla | 8 |
| 16 | Grantville | 7 |
| 17 | Rancho Bernadino | 7 |
| 18 | Balboa Park | 6 |
| 19 | Mission Valley | 5 |
| 20 | Park West | 5 |
| 21 | Normal Heights | 5 |
| 22 | Cortez Hill | 5 |
| 23 | Roseville | 4 |
| 24 | Bay Park | 4 |
| 25 | Linda Vista | 4 |
| 26 | Otay Ranch | 4 |
| 27 | Tierrasanta | 4 |
| 28 | Clairemont Mesa | 3 |
| 29 | Serra Mesa | 3 |
| 30 | Moreno Mission | 3 |
| 31 | Ocean Beach | 3 |
| 32 | Carmel Mountain | 3 |
| 33 | City Heights East | 3 |
| 34 | North Clairemont | 3 |
| 35 | Del Mar Heights | 3 |
| 36 | Lake Murray | 3 |
| 37 | South Park | 2 |
| 38 | City Heights West | 2 |
| 39 | Mount Hope | 2 |
| 40 | College Area | 2 |
| 41 | Bay Ho | 2 |
| 42 | Lynwood Hills | 2 |
| 43 | West University Heights | 2 |
| 44 | Rancho Penasquitos | 2 |
| 45 | Southwest | 1 |
| 46 | Rolling Hills Ranch | 1 |
| 47 | Torrey Pines | 1 |
| 48 | Gateway | 1 |
| 49 | Rolando | 1 |
| 50 | Bay Terrace | 1 |
| 51 | Northwest | 1 |
| 52 | Horton Plaza | 1 |
| 53 | North City | 1 |
| 54 | Columbia | 1 |
| 55 | East Lake | 1 |
| 56 | Egger Highlands | 1 |
| 57 | Kensington | 1 |
| 58 | Wooded Area | 1 |
ListingsLTM_SanDiego_Extended.query('minimum_nights > 15').groupby('room_type')['id'].agg(['count']).reset_index()
| room_type | count | |
|---|---|---|
| 0 | Entire home/apt | 304 |
| 1 | Private room | 63 |
| 2 | Shared room | 1 |
According to the tables above: (1) the number of listings being rented to 'tourists' dramatically surpasses the number of those going to potential medium/long term residents, (2) as expected, the same neighbourhoods with the largest number of listings (overall) also have the largest number of listings rented to 'tourists' (in fact, it is almost the same) and (3) entire homes/apartments are the predominant 'room type' being rented out.
ListingsLTM_SanDiego_Extended.query('minimum_nights > 15')['id'].agg(['count']).agg('sum')
368
ListingsLTM_SanDiego_Extended['number_of_reviews_ltm'].agg(['sum'])*2
sum 239174 Name: number_of_reviews_ltm, dtype: int64
def CALC_occupancy_rate(reviews_ltm, minimum_nights):
# initial assumptions
review_rate = 0.5
days_in_month = 31
months_in_year = 12
minimum_stay_length_assumption = 4
max_occupancy = 0.75
max_nights_per_year = 365
# establish limit for minimum number of nigths, calculate number of stays per year, limit this latter number to 365.
minimum_stay_length = minimum_nights.clip(lower = minimum_stay_length_assumption)
nights_per_year = (reviews_ltm / review_rate) * (minimum_stay_length)
nights_per_year.loc[nights_per_year > max_nights_per_year] = 365
# calculate occupancy rate with the previous limits
occupancy_per_month = (nights_per_year / months_in_year ) / days_in_month
# establish cap for anormaly high occupancy rate
occupancy_per_month.loc[occupancy_per_month > max_occupancy] = 0.75
# fill missing values with a zero (0)
occupancy_per_month_fillna = occupancy_per_month.fillna(0)
return occupancy_per_month_fillna
ListingsLTM_SanDiego_Extended['occupancy_rate'] = CALC_occupancy_rate(ListingsLTM_SanDiego_Extended['number_of_reviews_ltm'], ListingsLTM_SanDiego_Extended['minimum_nights'])
ListingsLTM_SanDiego_Extended
<ipython-input-36-1a781d3dd30a>:1: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy ListingsLTM_SanDiego_Extended['occupancy_rate'] = CALC_occupancy_rate(ListingsLTM_SanDiego_Extended['number_of_reviews_ltm'], ListingsLTM_SanDiego_Extended['minimum_nights'])
| id | name | host_id | host_name | host_since | host_is_superhost | host_neighbourhood | host_listings_count | host_total_listings_count | neighbourhood_cleansed | ... | availability_90 | number_of_reviews | number_of_reviews_ltm | number_of_reviews_l30d | first_review | last_review | license | calculated_host_listings_count | reviews_per_month | occupancy_rate | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 29967 | Great home, 10 min walk to Beach | 129123 | Michael | 2010-05-21 | t | Pacific Beach | 5.0 | 5.0 | Pacific Beach | ... | 59 | 61 | 1 | 0 | 2010-07-09 | 2020-08-31 | NaN | 5 | 0.49 | 0.021505 |
| 3 | 54001 | La Jolla 2 Bdr Cottage: 1 Qn; 2Twns, Blks 2 Ocn | 252692 | Marsha | 2010-10-04 | t | La Jolla | 5.0 | 5.0 | La Jolla | ... | 11 | 234 | 25 | 5 | 2011-01-04 | 2020-10-18 | NaN | 2 | 1.96 | 0.537634 |
| 4 | 62274 | charming, colorful, close to beach | 302986 | Isabel | 2010-11-28 | t | Pacific Beach | 2.0 | 2.0 | Pacific Beach | ... | 35 | 609 | 72 | 1 | 2010-12-05 | 2020-09-27 | NaN | 2 | 5.06 | 0.750000 |
| 5 | 62949 | Pacific Beach Cozy Private Unit Bikes Included | 21532 | Lisa | 2009-06-14 | t | Pacific Beach | 2.0 | 2.0 | Pacific Beach | ... | 66 | 699 | 91 | 9 | 2012-08-23 | 2020-10-20 | NaN | 2 | 7.02 | 0.750000 |
| 7 | 75668 | San Diego Living by JA 2 | 401936 | Johnathon | 2011-02-20 | f | North Park | 2.0 | 2.0 | North Hills | ... | 15 | 195 | 7 | 1 | 2011-07-25 | 2020-09-30 | NaN | 2 | 1.73 | 0.150538 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 8546 | 45817195 | Family home with 3 bedrooms, nice neighborhood | 371444913 | Luz | 2020-10-10 | f | Clairemont | 1.0 | 1.0 | Clairemont Mesa | ... | 0 | 1 | 1 | 1 | 2020-10-19 | 2020-10-19 | NaN | 1 | 1.00 | 0.021505 |
| 8553 | 45831887 | Beautiful Place | 47352531 | Lucy E | 2015-10-24 | t | Ocean View Hills | 1.0 | 1.0 | Amphitheater And Water Park | ... | 84 | 1 | 1 | 1 | 2020-10-18 | 2020-10-18 | NaN | 2 | 1.00 | 0.021505 |
| 8559 | 45844736 | Great Room in Quiet House | 370815670 | Najib | 2020-10-05 | f | San Carlos | 2.0 | 2.0 | Lake Murray | ... | 0 | 1 | 1 | 1 | 2020-10-22 | 2020-10-22 | NaN | 2 | 1.00 | 0.021505 |
| 8571 | 45862532 | Large Bedrooms - Relaxing Patio- Farm Vibe in ... | 11612667 | Trevor & Heidi | 2014-01-24 | t | Hillcrest | 3.0 | 3.0 | Encanto | ... | 72 | 1 | 1 | 1 | 2020-10-16 | 2020-10-16 | NaN | 2 | 1.00 | 0.021505 |
| 8583 | 45879403 | Charming Downtown San Diego Skyrise 1 Bedroom Apt | 199526348 | Jeffrey | 2018-07-02 | f | East Village | 0.0 | 0.0 | East Village | ... | 55 | 5 | 5 | 5 | 2020-10-16 | 2020-10-20 | NaN | 1 | 5.00 | 0.107527 |
6506 rows × 27 columns
ListingsLTM_SanDiego_Extended.groupby('occupancy_rate')['id'].agg(['count']).sort_values(by = 'count')
| count | |
|---|---|
| occupancy_rate | |
| 0.725806 | 1 |
| 0.698925 | 1 |
| 0.209677 | 1 |
| 0.419355 | 1 |
| 0.618280 | 1 |
| ... | ... |
| 0.107527 | 251 |
| 0.064516 | 343 |
| 0.043011 | 382 |
| 0.021505 | 468 |
| 0.750000 | 1241 |
80 rows × 1 columns
The considerable majority of listings seems to have the maximum occupancy rate allowed by the function. It is probable that the review rate considered is lower in reality.
ListingsLTM_SanDiego_Extended['income_per_month'] = ListingsLTM_SanDiego_Extended['price'] * ListingsLTM_SanDiego_Extended['occupancy_rate'] * 31
ListingsLTM_SanDiego_Extended
<ipython-input-38-34e2c17a8177>:1: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy ListingsLTM_SanDiego_Extended['income_per_month'] = ListingsLTM_SanDiego_Extended['price'] * ListingsLTM_SanDiego_Extended['occupancy_rate'] * 31
| id | name | host_id | host_name | host_since | host_is_superhost | host_neighbourhood | host_listings_count | host_total_listings_count | neighbourhood_cleansed | ... | number_of_reviews | number_of_reviews_ltm | number_of_reviews_l30d | first_review | last_review | license | calculated_host_listings_count | reviews_per_month | occupancy_rate | income_per_month | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 29967 | Great home, 10 min walk to Beach | 129123 | Michael | 2010-05-21 | t | Pacific Beach | 5.0 | 5.0 | Pacific Beach | ... | 61 | 1 | 0 | 2010-07-09 | 2020-08-31 | NaN | 5 | 0.49 | 0.021505 | 150.000000 |
| 3 | 54001 | La Jolla 2 Bdr Cottage: 1 Qn; 2Twns, Blks 2 Ocn | 252692 | Marsha | 2010-10-04 | t | La Jolla | 5.0 | 5.0 | La Jolla | ... | 234 | 25 | 5 | 2011-01-04 | 2020-10-18 | NaN | 2 | 1.96 | 0.537634 | 2250.000000 |
| 4 | 62274 | charming, colorful, close to beach | 302986 | Isabel | 2010-11-28 | t | Pacific Beach | 2.0 | 2.0 | Pacific Beach | ... | 609 | 72 | 1 | 2010-12-05 | 2020-09-27 | NaN | 2 | 5.06 | 0.750000 | 1604.250000 |
| 5 | 62949 | Pacific Beach Cozy Private Unit Bikes Included | 21532 | Lisa | 2009-06-14 | t | Pacific Beach | 2.0 | 2.0 | Pacific Beach | ... | 699 | 91 | 9 | 2012-08-23 | 2020-10-20 | NaN | 2 | 7.02 | 0.750000 | 1813.500000 |
| 7 | 75668 | San Diego Living by JA 2 | 401936 | Johnathon | 2011-02-20 | f | North Park | 2.0 | 2.0 | North Hills | ... | 195 | 7 | 1 | 2011-07-25 | 2020-09-30 | NaN | 2 | 1.73 | 0.150538 | 210.000000 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 8546 | 45817195 | Family home with 3 bedrooms, nice neighborhood | 371444913 | Luz | 2020-10-10 | f | Clairemont | 1.0 | 1.0 | Clairemont Mesa | ... | 1 | 1 | 1 | 2020-10-19 | 2020-10-19 | NaN | 1 | 1.00 | 0.021505 | 40.000000 |
| 8553 | 45831887 | Beautiful Place | 47352531 | Lucy E | 2015-10-24 | t | Ocean View Hills | 1.0 | 1.0 | Amphitheater And Water Park | ... | 1 | 1 | 1 | 2020-10-18 | 2020-10-18 | NaN | 2 | 1.00 | 0.021505 | 33.333333 |
| 8559 | 45844736 | Great Room in Quiet House | 370815670 | Najib | 2020-10-05 | f | San Carlos | 2.0 | 2.0 | Lake Murray | ... | 1 | 1 | 1 | 2020-10-22 | 2020-10-22 | NaN | 2 | 1.00 | 0.021505 | 45.333333 |
| 8571 | 45862532 | Large Bedrooms - Relaxing Patio- Farm Vibe in ... | 11612667 | Trevor & Heidi | 2014-01-24 | t | Hillcrest | 3.0 | 3.0 | Encanto | ... | 1 | 1 | 1 | 2020-10-16 | 2020-10-16 | NaN | 2 | 1.00 | 0.021505 | 63.333333 |
| 8583 | 45879403 | Charming Downtown San Diego Skyrise 1 Bedroom Apt | 199526348 | Jeffrey | 2018-07-02 | f | East Village | 0.0 | 0.0 | East Village | ... | 5 | 5 | 5 | 2020-10-16 | 2020-10-20 | NaN | 1 | 5.00 | 0.107527 | 373.333333 |
6506 rows × 28 columns
ListingsLTM_SanDiego_Extended['income_per_month'].agg(['min', 'max', 'mean']).sort_values().reset_index()
| index | income_per_month | |
|---|---|---|
| 0 | min | 13.333333 |
| 1 | mean | 1754.195730 |
| 2 | max | 18898.000000 |
ListingsLTM_SanDiego_Extended['income_per_month'].std()*2
3684.7285119028206
ListingsLTM_SanDiego_Extended['income_per_month'].hist(bins=50)
<AxesSubplot:>
ListingsLTM_SanDiego_Extended.query('income_per_month < 5280')['income_per_month'].hist(bins=50)
<AxesSubplot:>
These histograms show that the distribution (skewed) of the monthly income for individual listings is not even, with most values ranging between $50 and 2000.
ListingsLTM_SanDiego_Extended.groupby('neighbourhood_cleansed')['income_per_month'].agg('sum').agg(['min', 'mean', 'max']).reset_index()
| index | income_per_month | |
|---|---|---|
| 0 | min | 5.716667e+01 |
| 1 | mean | 1.129980e+05 |
| 2 | max | 2.247405e+06 |
ListingsLTM_SanDiego_Extended.groupby('neighbourhood_cleansed')['income_per_month'].agg('sum').std()*2
569243.3071773835
ListingsLTM_SanDiego_Extended.groupby('neighbourhood_cleansed')['income_per_month'].agg('sum').sort_values(ascending = False).reset_index()
| neighbourhood_cleansed | income_per_month | |
|---|---|---|
| 0 | Mission Bay | 2.247405e+06 |
| 1 | Pacific Beach | 1.120039e+06 |
| 2 | La Jolla | 9.270841e+05 |
| 3 | Ocean Beach | 8.748334e+05 |
| 4 | Midtown | 5.403642e+05 |
| ... | ... | ... |
| 96 | Eastlake Woods | 7.386667e+02 |
| 97 | Bonita Long Canyon | 6.100000e+02 |
| 98 | Estlake Greens | 5.506667e+02 |
| 99 | Amphitheater And Water Park | 4.233333e+02 |
| 100 | Sabre Springs | 5.716667e+01 |
101 rows × 2 columns
ListingsLTM_SanDiego_Extended.groupby('neighbourhood_cleansed')['income_per_month'].agg('sum').hist(bins=100)
<AxesSubplot:>
This histogram shows the general distribution of monthly income (x-axis) when grouped by negihbourhood. It shows the presence of a couple of extreme values (with the neighbourhood all the way to the right being 'Mission Bay'). Since the histogram doesn't seem to be a good representation of the data when all the values are considered, some of them are filtered out (mean + std).
## Filtered values through mean + std
ListingsLTM_SanDiego_Extended.groupby('neighbourhood_cleansed')['income_per_month'].agg('sum').reset_index().\
query('income_per_month < 682241').hist(bins=100)
array([[<AxesSubplot:title={'center':'income_per_month'}>]], dtype=object)
# Visual filtering
ListingsLTM_SanDiego_Extended.groupby('neighbourhood_cleansed')['income_per_month'].agg('sum').reset_index().\
query('income_per_month < 100000').hist(bins=100)
array([[<AxesSubplot:title={'center':'income_per_month'}>]], dtype=object)
In the same way as before, the histogram shows that the montlhy income is not evenly distributed (in terms of values), with most incomes being clustered along the $500-15000 range. Despite this, and even though the extreme values were filtered out, there is still a relatively high number of neigbourhoods with high summed monthly incomes (>20000). The problem with this type of histogram is that it does not explicitly differentiate between neighbourhoods
Neigh_Higher_Income = ['Mission Bay', 'Pacific Beach', 'Ocean Beach', 'La Jolla', 'North Hills']
for value in Neigh_Higher_Income:
ListingsLTM_SanDiego_Extended.query('neighbourhood_cleansed == @value')['income_per_month'].reset_index().hist(column = 'income_per_month', linewidth=1, edgecolor='white', bins=50)
While these histograms don't show anything particularly different than what has been described (the distribution of monthly income per neighbourhood is for the most part, skewed), they do show that for some neighbourhoods the distribution of monthly income (across the range of values) is more even, and would even appear to follow the shape of a bell curve
ListingsLTM_SanDiego_Extended.groupby('host_id')['income_per_month'].agg('sum').sort_values(ascending = False).head(10).reset_index()
| host_id | income_per_month | |
|---|---|---|
| 0 | 104309976 | 134522.250000 |
| 1 | 130904349 | 131092.000000 |
| 2 | 88168913 | 124110.666667 |
| 3 | 38690778 | 97234.000000 |
| 4 | 9832430 | 92995.166667 |
| 5 | 263534443 | 92416.166667 |
| 6 | 122055416 | 90296.666667 |
| 7 | 43349223 | 89940.083333 |
| 8 | 22012010 | 83682.666667 |
| 9 | 198870547 | 76028.333333 |
ListingsLTM_SanDiego_Extended.groupby('host_id')['income_per_month'].agg('sum').sort_values(ascending = False).head(10).agg('sum')
1012318.0
ListingsLTM_SanDiego_Extended.groupby('host_id')['income_per_month'].agg('sum').sort_values().head(1000).agg('sum')
349052.8333333333
This comparison partly shows how unevenly distributed the gains from Airbnb are. The gains for the top 10 "hosts", which in reality are probably private companies in the vacational rental market (or representatives in their name), are almost three times as high as those for the bottom 1000 hosts
ListingsLTM_SanDiego_Extended.groupby('host_id')['income_per_month'].agg('sum').hist(bins=50)
<AxesSubplot:>
ListingsLTM_SanDiego_Extended.groupby('host_id')['income_per_month'].agg('sum').agg(['min', 'mean', 'max']).reset_index()
| index | income_per_month | |
|---|---|---|
| 0 | min | 16.666667 |
| 1 | mean | 3574.318013 |
| 2 | max | 134522.250000 |
ListingsLTM_SanDiego_Extended.groupby('host_id')['income_per_month'].agg('sum').sort_values(ascending = False).std()
8036.161622886204
## Filteres values thorugh mean + std
ListingsLTM_SanDiego_Extended.groupby('host_id')['income_per_month'].agg('sum').reset_index().query('income_per_month < 11139').\
sort_values(by ='income_per_month', ascending = False).reset_index()
| index | host_id | income_per_month | |
|---|---|---|---|
| 0 | 1185 | 34879272 | 11106.500000 |
| 1 | 2437 | 157943925 | 11055.333333 |
| 2 | 890 | 21888797 | 11023.083333 |
| 3 | 2447 | 160887862 | 11010.000000 |
| 4 | 196 | 2409798 | 11000.833333 |
| ... | ... | ... | ... |
| 3012 | 880 | 21710093 | 23.333333 |
| 3013 | 2733 | 225508386 | 23.333333 |
| 3014 | 1545 | 54403633 | 23.333333 |
| 3015 | 2592 | 191436645 | 18.000000 |
| 3016 | 2355 | 144872027 | 16.666667 |
3017 rows × 3 columns
# Number of individual hosts
ListingsLTM_SanDiego_Extended['host_id'].nunique()
3193
ListingsLTM_SanDiego_Extended.groupby('host_id')['income_per_month'].agg('sum').reset_index().\
query('income_per_month < 11139')['income_per_month'].hist(bins=100)
<AxesSubplot:>
In the same way as when the income per month was grouped by neighbourhood, the grouping by host also seems to be unequal, with most values being concentraded in the 50-2000 range.
## 39977/12 = 3331 .... 3331/2 = 1665 .... Real hosts that don't meet the requirement and potential companies are filtered out
ListingsLTM_SanDiego_Extended.groupby('host_id')['income_per_month'].agg('sum').reset_index().query('1665 < income_per_month < 11139').agg('count')*100/3331
host_id 41.398979 income_per_month 41.398979 dtype: float64
According to the calculation above, approximately 40% of the hosts could obtain a substantial portion of their income through Airbnb
chart1.mark_bar().encode(x = alt.X('neighbourhood_cleansed', sort = '-y'), y = 'mean(occupancy_rate)', tooltip=['neighbourhood_cleansed', 'mean(occupancy_rate)', 'count()'])
As previously shown with the histogram, this bar graph shows that the occupancy rates across all the neighbourhoods remains relatively high, with the majority falling in the range between 20 and 50%.
chart1.mark_bar().encode(x = alt.X('neighbourhood_cleansed', sort = '-y'), y = 'sum(income_per_month)', tooltip=['neighbourhood_cleansed', 'sum(income_per_month)', 'count()'])
This bar graph also shows, now more clearly, how uneven the distibution of monthly income is when grouped by neighbourhood.
Neighbourhoods_Shp = geopandas.read_file('SAN DIEGO NH-DIST/pd_neighborhoods_datasd.shp')
Neighbourhoods_Shp.plot()
Neighbourhoods_Shp
| OBJECTID | NBH_NAME | ID | AVG RENT | AREA | geometry | |
|---|---|---|---|---|---|---|
| 0 | 1 | MIRAMAR RANCH NORTH | 1 | 2447 | 8337561 | POLYGON ((6299129.000 1925775.999, 6299167.000... |
| 1 | 2 | TORREY HIGHLANDS | 2 | 2924 | 5771076 | POLYGON ((6279516.942 1928760.333, 6279517.075... |
| 2 | 3 | MISSION BAY | 3 | 2311 | 8197605 | POLYGON ((6252821.938 1856536.742, 6252821.956... |
| 3 | 4 | NORTH CITY | 4 | 3080 | 12332202 | POLYGON ((6257720.253 1939882.556, 6257824.538... |
| 4 | 5 | LOMA PORTAL | 5 | 2185 | 1759553 | POLYGON ((6264112.999 1853860.000, 6264336.974... |
| ... | ... | ... | ... | ... | ... | ... |
| 119 | 120 | CLAIREMONT MESA WEST | 120 | 1880 | 5612055 | POLYGON ((6277839.999 1872630.000, 6277840.738... |
| 120 | 121 | BIRDLAND | 121 | 2413 | 2015765 | POLYGON ((6283884.000 1864870.000, 6283738.000... |
| 121 | 122 | MIRAMAR | 122 | 2433 | 34306538 | POLYGON ((6295761.141 1908441.072, 6295772.054... |
| 122 | 123 | KEARNY MESA | 123 | 2219 | 15425344 | POLYGON ((6292001.323 1887162.478, 6292390.090... |
| 123 | 124 | SABRE SPRINGS | 124 | 2407 | 6449917 | POLYGON ((6305786.454 1931764.390, 6305786.467... |
124 rows × 6 columns
Neighbourhoods_Shp.crs
<Projected CRS: EPSG:2230> Name: NAD83 / California zone 6 (ftUS) Axis Info [cartesian]: - X[east]: Easting (US survey foot) - Y[north]: Northing (US survey foot) Area of Use: - name: USA - California - SPCS - 6 - bounds: (-118.15, 32.53, -114.42, 34.08) Coordinate Operation: - name: SPCS83 California zone 6 (US Survey feet) - method: Lambert Conic Conformal (2SP) Datum: North American Datum 1983 - Ellipsoid: GRS 1980 - Prime Meridian: Greenwich
ListingsLTM_SanDiego_Extended_GEO = geopandas.GeoDataFrame(ListingsLTM_SanDiego_Extended, geometry = geopandas.points_from_xy(ListingsLTM_SanDiego_Extended['longitude'], ListingsLTM_SanDiego_Extended['latitude']), crs = 'EPSG:4326')
ListingsLTM_SanDiego_Extended_GEO.plot()
ListingsLTM_SanDiego_Extended_GEO
| id | name | host_id | host_name | host_since | host_is_superhost | host_neighbourhood | host_listings_count | host_total_listings_count | neighbourhood_cleansed | ... | number_of_reviews_ltm | number_of_reviews_l30d | first_review | last_review | license | calculated_host_listings_count | reviews_per_month | occupancy_rate | income_per_month | geometry | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 29967 | Great home, 10 min walk to Beach | 129123 | Michael | 2010-05-21 | t | Pacific Beach | 5.0 | 5.0 | Pacific Beach | ... | 1 | 0 | 2010-07-09 | 2020-08-31 | NaN | 5 | 0.49 | 0.021505 | 150.000000 | POINT (-117.25630 32.80724) |
| 3 | 54001 | La Jolla 2 Bdr Cottage: 1 Qn; 2Twns, Blks 2 Ocn | 252692 | Marsha | 2010-10-04 | t | La Jolla | 5.0 | 5.0 | La Jolla | ... | 25 | 5 | 2011-01-04 | 2020-10-18 | NaN | 2 | 1.96 | 0.537634 | 2250.000000 | POINT (-117.26856 32.81301) |
| 4 | 62274 | charming, colorful, close to beach | 302986 | Isabel | 2010-11-28 | t | Pacific Beach | 2.0 | 2.0 | Pacific Beach | ... | 72 | 1 | 2010-12-05 | 2020-09-27 | NaN | 2 | 5.06 | 0.750000 | 1604.250000 | POINT (-117.24243 32.80734) |
| 5 | 62949 | Pacific Beach Cozy Private Unit Bikes Included | 21532 | Lisa | 2009-06-14 | t | Pacific Beach | 2.0 | 2.0 | Pacific Beach | ... | 91 | 9 | 2012-08-23 | 2020-10-20 | NaN | 2 | 7.02 | 0.750000 | 1813.500000 | POINT (-117.23056 32.80961) |
| 7 | 75668 | San Diego Living by JA 2 | 401936 | Johnathon | 2011-02-20 | f | North Park | 2.0 | 2.0 | North Hills | ... | 7 | 1 | 2011-07-25 | 2020-09-30 | NaN | 2 | 1.73 | 0.150538 | 210.000000 | POINT (-117.14423 32.74730) |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 8546 | 45817195 | Family home with 3 bedrooms, nice neighborhood | 371444913 | Luz | 2020-10-10 | f | Clairemont | 1.0 | 1.0 | Clairemont Mesa | ... | 1 | 1 | 2020-10-19 | 2020-10-19 | NaN | 1 | 1.00 | 0.021505 | 40.000000 | POINT (-117.18841 32.81701) |
| 8553 | 45831887 | Beautiful Place | 47352531 | Lucy E | 2015-10-24 | t | Ocean View Hills | 1.0 | 1.0 | Amphitheater And Water Park | ... | 1 | 1 | 2020-10-18 | 2020-10-18 | NaN | 2 | 1.00 | 0.021505 | 33.333333 | POINT (-117.00472 32.58276) |
| 8559 | 45844736 | Great Room in Quiet House | 370815670 | Najib | 2020-10-05 | f | San Carlos | 2.0 | 2.0 | Lake Murray | ... | 1 | 1 | 2020-10-22 | 2020-10-22 | NaN | 2 | 1.00 | 0.021505 | 45.333333 | POINT (-117.00891 32.79039) |
| 8571 | 45862532 | Large Bedrooms - Relaxing Patio- Farm Vibe in ... | 11612667 | Trevor & Heidi | 2014-01-24 | t | Hillcrest | 3.0 | 3.0 | Encanto | ... | 1 | 1 | 2020-10-16 | 2020-10-16 | NaN | 2 | 1.00 | 0.021505 | 63.333333 | POINT (-117.05482 32.71804) |
| 8583 | 45879403 | Charming Downtown San Diego Skyrise 1 Bedroom Apt | 199526348 | Jeffrey | 2018-07-02 | f | East Village | 0.0 | 0.0 | East Village | ... | 5 | 5 | 2020-10-16 | 2020-10-20 | NaN | 1 | 5.00 | 0.107527 | 373.333333 | POINT (-117.15123 32.70967) |
6506 rows × 29 columns
ListingsLTM_SanDiego_Extended_GEO = ListingsLTM_SanDiego_Extended_GEO.to_crs(Neighbourhoods_Shp.crs)
ListingsLTM_SanDiego_Extended_GEO.plot()
ListingsLTM_SanDiego_Extended_GEO
| id | name | host_id | host_name | host_since | host_is_superhost | host_neighbourhood | host_listings_count | host_total_listings_count | neighbourhood_cleansed | ... | number_of_reviews_ltm | number_of_reviews_l30d | first_review | last_review | license | calculated_host_listings_count | reviews_per_month | occupancy_rate | income_per_month | geometry | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 29967 | Great home, 10 min walk to Beach | 129123 | Michael | 2010-05-21 | t | Pacific Beach | 5.0 | 5.0 | Pacific Beach | ... | 1 | 0 | 2010-07-09 | 2020-08-31 | NaN | 5 | 0.49 | 0.021505 | 150.000000 | POINT (6252467.481 1874983.843) |
| 3 | 54001 | La Jolla 2 Bdr Cottage: 1 Qn; 2Twns, Blks 2 Ocn | 252692 | Marsha | 2010-10-04 | t | La Jolla | 5.0 | 5.0 | La Jolla | ... | 25 | 5 | 2011-01-04 | 2020-10-18 | NaN | 2 | 1.96 | 0.537634 | 2250.000000 | POINT (6248721.059 1877119.715) |
| 4 | 62274 | charming, colorful, close to beach | 302986 | Isabel | 2010-11-28 | t | Pacific Beach | 2.0 | 2.0 | Pacific Beach | ... | 72 | 1 | 2010-12-05 | 2020-09-27 | NaN | 2 | 5.06 | 0.750000 | 1604.250000 | POINT (6256729.442 1874979.378) |
| 5 | 62949 | Pacific Beach Cozy Private Unit Bikes Included | 21532 | Lisa | 2009-06-14 | t | Pacific Beach | 2.0 | 2.0 | Pacific Beach | ... | 91 | 9 | 2012-08-23 | 2020-10-20 | NaN | 2 | 7.02 | 0.750000 | 1813.500000 | POINT (6260384.315 1875770.765) |
| 7 | 75668 | San Diego Living by JA 2 | 401936 | Johnathon | 2011-02-20 | f | North Park | 2.0 | 2.0 | North Hills | ... | 7 | 1 | 2011-07-25 | 2020-09-30 | NaN | 2 | 1.73 | 0.150538 | 210.000000 | POINT (6286714.555 1852861.852) |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 8546 | 45817195 | Family home with 3 bedrooms, nice neighborhood | 371444913 | Luz | 2020-10-10 | f | Clairemont | 1.0 | 1.0 | Clairemont Mesa | ... | 1 | 1 | 2020-10-19 | 2020-10-19 | NaN | 1 | 1.00 | 0.021505 | 40.000000 | POINT (6273359.005 1878343.942) |
| 8553 | 45831887 | Beautiful Place | 47352531 | Lucy E | 2015-10-24 | t | Ocean View Hills | 1.0 | 1.0 | Amphitheater And Water Park | ... | 1 | 1 | 2020-10-18 | 2020-10-18 | NaN | 2 | 1.00 | 0.021505 | 33.333333 | POINT (6329176.034 1792656.742) |
| 8559 | 45844736 | Great Room in Quiet House | 370815670 | Najib | 2020-10-05 | f | San Carlos | 2.0 | 2.0 | Lake Murray | ... | 1 | 1 | 2020-10-22 | 2020-10-22 | NaN | 2 | 1.00 | 0.021505 | 45.333333 | POINT (6328435.196 1868209.736) |
| 8571 | 45862532 | Large Bedrooms - Relaxing Patio- Farm Vibe in ... | 11612667 | Trevor & Heidi | 2014-01-24 | t | Hillcrest | 3.0 | 3.0 | Encanto | ... | 1 | 1 | 2020-10-16 | 2020-10-16 | NaN | 2 | 1.00 | 0.021505 | 63.333333 | POINT (6314123.016 1841992.025) |
| 8583 | 45879403 | Charming Downtown San Diego Skyrise 1 Bedroom Apt | 199526348 | Jeffrey | 2018-07-02 | f | East Village | 0.0 | 0.0 | East Village | ... | 5 | 5 | 2020-10-16 | 2020-10-20 | NaN | 1 | 5.00 | 0.107527 | 373.333333 | POINT (6284443.950 1839189.343) |
6506 rows × 29 columns
ListingsLTM_SanDiego_Extended_GEO_District = geopandas.sjoin(ListingsLTM_SanDiego_Extended_GEO, Neighbourhoods_Shp)
ListingsLTM_SanDiego_Extended_GEO_District
| id | name | host_id | host_name | host_since | host_is_superhost | host_neighbourhood | host_listings_count | host_total_listings_count | neighbourhood_cleansed | ... | reviews_per_month | occupancy_rate | income_per_month | geometry | index_right | OBJECTID | NBH_NAME | ID | AVG RENT | AREA | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 29967 | Great home, 10 min walk to Beach | 129123 | Michael | 2010-05-21 | t | Pacific Beach | 5.0 | 5.0 | Pacific Beach | ... | 0.49 | 0.021505 | 150.000000 | POINT (6252467.481 1874983.843) | 41 | 42 | PACIFIC BEACH | 42 | 2311 | 11385763 |
| 4 | 62274 | charming, colorful, close to beach | 302986 | Isabel | 2010-11-28 | t | Pacific Beach | 2.0 | 2.0 | Pacific Beach | ... | 5.06 | 0.750000 | 1604.250000 | POINT (6256729.442 1874979.378) | 41 | 42 | PACIFIC BEACH | 42 | 2311 | 11385763 |
| 5 | 62949 | Pacific Beach Cozy Private Unit Bikes Included | 21532 | Lisa | 2009-06-14 | t | Pacific Beach | 2.0 | 2.0 | Pacific Beach | ... | 7.02 | 0.750000 | 1813.500000 | POINT (6260384.315 1875770.765) | 41 | 42 | PACIFIC BEACH | 42 | 2311 | 11385763 |
| 11 | 108349 | Felspar Townhome- Beach Living by Boardwalk & ... | 546519 | Juliana | 2011-04-30 | f | Pacific Beach | 2.0 | 2.0 | Pacific Beach | ... | 1.33 | 0.193548 | 1518.000000 | POINT (6253092.031 1871553.868) | 41 | 42 | PACIFIC BEACH | 42 | 2311 | 11385763 |
| 14 | 126344 | Tourmaline House - Steps to Beach, Pet-Friendly | 546519 | Juliana | 2011-04-30 | f | Pacific Beach | 2.0 | 2.0 | Pacific Beach | ... | 1.43 | 0.387097 | 3300.000000 | POINT (6251521.931 1874439.911) | 41 | 42 | PACIFIC BEACH | 42 | 2311 | 11385763 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 6366 | 39369980 | Private Guest Flat Close to Downtown San Diego | 292991393 | Eunhae | 2019-09-07 | t | Encanto | 2.0 | 2.0 | Emerald Hills | ... | 5.09 | 0.750000 | 1464.750000 | POINT (6309919.628 1841380.718) | 32 | 33 | EMERALD HILLS | 33 | 1100 | 2143001 |
| 7052 | 42108386 | Home nestled on a hill with beautiful views! | 129182730 | Chinkie | 2017-05-06 | t | NaN | 2.0 | 2.0 | Emerald Hills | ... | 1.81 | 0.301075 | 3378.666667 | POINT (6308298.905 1843754.921) | 32 | 33 | EMERALD HILLS | 33 | 1100 | 2143001 |
| 7654 | 43789381 | 5-Minutes from All Stores including Public Tra... | 350030596 | Angelia | 2020-06-14 | f | Emerald Hills | 0.0 | 0.0 | Emerald Hills | ... | 3.81 | 0.344086 | 512.000000 | POINT (6305648.199 1839973.654) | 32 | 33 | EMERALD HILLS | 33 | 1100 | 2143001 |
| 8161 | 45157340 | Paradise View Point (Private Oasis) 🌄 84'' TV | 315415267 | Jason | 2019-12-07 | t | Emerald Hills | 1.0 | 1.0 | Emerald Hills | ... | 4.47 | 0.150538 | 1530.666667 | POINT (6306512.258 1840319.710) | 32 | 33 | EMERALD HILLS | 33 | 1100 | 2143001 |
| 7490 | 43435391 | Comfortable Getaway with A/C - 2 Bedroom | 27621760 | Yumi | 2015-02-12 | f | City Heights | 1.0 | 1.0 | City Heights East | ... | 4.07 | 0.408602 | 1545.333333 | POINT (6303136.041 1851542.676) | 90 | 91 | FOX CANYON | 91 | 1664 | 242432 |
6257 rows × 35 columns
ListingsLTM_SanDiego_Extended_GEO_District2 = ListingsLTM_SanDiego_Extended_GEO_District.groupby('NBH_NAME')['id'].agg(['count']).reset_index()
ListingsLTM_SanDiego_Extended_GEO_District2
| NBH_NAME | count | |
|---|---|---|
| 0 | ADAMS NORTH | 43 |
| 1 | ALLIED GARDENS | 22 |
| 2 | AZALEA/HOLLYWOOD PARK | 9 |
| 3 | BALBOA PARK | 15 |
| 4 | BARRIO LOGAN | 22 |
| ... | ... | ... |
| 111 | TORREY PRESERVE | 3 |
| 112 | UNIVERSITY CITY | 97 |
| 113 | UNIVERSITY HEIGHTS | 127 |
| 114 | VALENCIA PARK | 16 |
| 115 | WOODED AREA | 7 |
116 rows × 2 columns
Neighbourhoods_Stats = Neighbourhoods_Shp.merge(ListingsLTM_SanDiego_Extended_GEO_District2, on = 'NBH_NAME')
Neighbourhoods_Stats.sort_values(by='count', ascending = False)
| OBJECTID | NBH_NAME | ID | AVG RENT | AREA | geometry | count | |
|---|---|---|---|---|---|---|---|
| 83 | 86 | MISSION BEACH | 86 | 2311 | 1540698 | POLYGON ((6253899.508 1868627.246, 6253819.881... | 802 |
| 40 | 42 | PACIFIC BEACH | 42 | 2311 | 11385763 | POLYGON ((6264900.000 1874689.000, 6265078.000... | 757 |
| 67 | 70 | LA JOLLA | 70 | 2035 | 23168003 | POLYGON ((6259097.000 1886352.000, 6259164.000... | 441 |
| 65 | 68 | OCEAN BEACH | 68 | 1963 | 3045940 | POLYGON ((6258855.000 1856489.000, 6258804.000... | 386 |
| 8 | 9 | NORTH PARK | 9 | 1774 | 7725075 | POLYGON ((6291161.001 1860765.001, 6291163.536... | 282 |
| ... | ... | ... | ... | ... | ... | ... | ... |
| 88 | 91 | FOX CANYON | 91 | 1664 | 242432 | POLYGON ((6304014.000 1853520.000, 6304011.941... | 1 |
| 19 | 20 | SORRENTO VALLEY | 20 | 1905 | 20718460 | POLYGON ((6280044.906 1906482.650, 6280045.948... | 1 |
| 59 | 62 | LINCOLN PARK | 62 | 1654 | 1864895 | POLYGON ((6304820.000 1838973.167, 6304820.000... | 1 |
| 64 | 67 | SAN PASQUAL | 67 | 2035 | 35262581 | POLYGON ((6328627.308 1985067.228, 6328625.264... | 1 |
| 53 | 56 | TIJUANA RIVER VALLEY | 56 | 2009 | 13958688 | POLYGON ((6311328.000 1783313.000, 6311324.000... | 1 |
116 rows × 7 columns
Map_SD = Neighbourhoods_Stats.plot()
Neighbourhoods_Stats.sort_values(by='count', ascending = False).head(10).plot(ax = Map_SD, color = 'red')
<AxesSubplot:>
In terms of the distribution of listings, this map also confirms what had been previously found with the tables: most of them are located in the already mentioned neighbourhoods.
With some of the questions above, a pattern had already began to emerge: the distribution of listings and income is not evenly distributed across the city, at least for the majority of neighbourhoods (mostly due to the presence of what can be assumed are private agencies); despite this, the listings don't seem to be rented most of the time to medium or long term residents, but mostLy to tourists.
With this map, this pattern, or part of it, seems to explained, as some of the aforementioned neighbourhoods are located along the coast, a location where the touristic industry is expected to be strong.
ListingsLTM_SanDiego_Extended_GEO_District3 = ListingsLTM_SanDiego_Extended_GEO_District.groupby('NBH_NAME')['income_per_month'].agg(['count', 'mean', 'sum']).reset_index()
ListingsLTM_SanDiego_Extended_GEO_District3
| NBH_NAME | count | mean | sum | |
|---|---|---|---|---|
| 0 | ADAMS NORTH | 43 | 1515.428295 | 65163.416667 |
| 1 | ALLIED GARDENS | 22 | 2747.212121 | 60438.666667 |
| 2 | AZALEA/HOLLYWOOD PARK | 9 | 1194.379630 | 10749.416667 |
| 3 | BALBOA PARK | 15 | 1478.183333 | 22172.750000 |
| 4 | BARRIO LOGAN | 22 | 1374.291667 | 30234.416667 |
| ... | ... | ... | ... | ... |
| 111 | TORREY PRESERVE | 3 | 2045.222222 | 6135.666667 |
| 112 | UNIVERSITY CITY | 97 | 1356.664948 | 131596.500000 |
| 113 | UNIVERSITY HEIGHTS | 127 | 1232.797244 | 156565.250000 |
| 114 | VALENCIA PARK | 16 | 2156.932292 | 34510.916667 |
| 115 | WOODED AREA | 7 | 1747.142857 | 12230.000000 |
116 rows × 4 columns
Neighbourhoods_Stats2 = Neighbourhoods_Shp.merge(ListingsLTM_SanDiego_Extended_GEO_District3, on = 'NBH_NAME')
Neighbourhoods_Stats2.sort_values(by= 'sum')
| OBJECTID | NBH_NAME | ID | AVG RENT | AREA | geometry | count | mean | sum | |
|---|---|---|---|---|---|---|---|---|---|
| 9 | 10 | SOUTHCREST | 10 | 1225 | 1252939 | POLYGON ((6299393.000 1831836.000, 6299233.000... | 1 | 60.000000 | 6.000000e+01 |
| 19 | 20 | SORRENTO VALLEY | 20 | 1905 | 20718460 | POLYGON ((6280044.906 1906482.650, 6280045.948... | 1 | 81.666667 | 8.166667e+01 |
| 53 | 56 | TIJUANA RIVER VALLEY | 56 | 2009 | 13958688 | POLYGON ((6311328.000 1783313.000, 6311324.000... | 1 | 140.000000 | 1.400000e+02 |
| 80 | 83 | SCRIPPS RANCH | 83 | 2447 | 78981423 | MULTIPOLYGON (((6314359.506 1918317.690, 63143... | 3 | 53.777778 | 1.613333e+02 |
| 10 | 11 | TERALTA WEST | 11 | 1664 | 452269 | POLYGON ((6300088.999 1855593.999, 6300084.353... | 2 | 210.333333 | 4.206667e+02 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 8 | 9 | NORTH PARK | 9 | 1774 | 7725075 | POLYGON ((6291161.001 1860765.001, 6291163.536... | 282 | 1595.888298 | 4.500405e+05 |
| 65 | 68 | OCEAN BEACH | 68 | 1963 | 3045940 | POLYGON ((6258855.000 1856489.000, 6258804.000... | 386 | 2269.337219 | 8.759642e+05 |
| 67 | 70 | LA JOLLA | 70 | 2035 | 23168003 | POLYGON ((6259097.000 1886352.000, 6259164.000... | 441 | 2060.524187 | 9.086912e+05 |
| 40 | 42 | PACIFIC BEACH | 42 | 2311 | 11385763 | POLYGON ((6264900.000 1874689.000, 6265078.000... | 757 | 1954.801959 | 1.479785e+06 |
| 83 | 86 | MISSION BEACH | 86 | 2311 | 1540698 | POLYGON ((6253899.508 1868627.246, 6253819.881... | 802 | 2109.289069 | 1.691650e+06 |
116 rows × 9 columns
Neighbourhoods_Stats2.plot(column = 'sum')
<AxesSubplot:>
Accordingly, given all of what has been explained, the majority of the gains from Airbnb in the city are clustered in the neighbourhoods located along the coast.
In general, the most important conclusion from this preliminary analysis is that despite some inequalities surround the Airbnb market, those inequalites should not have, at least theoretically based on all the assumption made, a significantly large impact on the long-term housing market